// 改造后的post方法，增加错误处理回调
function post(url, data, successFunc, errorFunc) {
    $.showLoading('加载中');
    // 使用$.ajax代替$.post，以捕获错误
    return $.ajax({
        url: url,
        type: 'POST',
        data: data,
        dataType: 'json',
        success: function(res) {
            $.hideLoading();
            if (res && res.code == 0) {
                if (typeof successFunc === "function") {
                    successFunc(res.data); // 成功回调
                } else {
                    $.toast(res.msg, function() {
                        if (res.url) window.location.href = res.url;
                    });
                }
            } else {
                $.toptip(res?.msg || '请求失败', 'error');
                // 触发错误回调（如状态码非0的情况）
                if (typeof errorFunc === "function") {
                    errorFunc(res?.msg || '请求返回错误');
                }
            }
        },
        error: function(xhr, status, error) {
            $.hideLoading();
            $.toptip('网络错误，请重试', 'error');
            // 触发错误回调（网络异常等情况）
            if (typeof errorFunc === "function") {
                errorFunc('网络错误: ' + error);
            }
        }
    });
}

$(".back-btn").click(function (){
    window.history.go(-1);
})

/**
 * 校验18位身份证号码合法性
 * @param {string} idCard 身份证号码（支持带空格，自动处理）
 * @returns {bool}
 */
function checkIdCard(idCard) {
    // 1. 预处理：去除空格，转换为大写（处理x的情况）
    idCard = idCard.trim().toUpperCase();

    // 2. 检查长度是否为18位
    if (idCard.length !== 18) {
        return false;
    }

    // 3. 检查格式：前17位为数字，第18位为数字或X
    const reg = /^\d{17}[\dX]$/;
    if (!reg.test(idCard)) {
        return false;
    }

    // 4. 提取出生日期并验证合法性（第7-14位：YYYYMMDD）
    const birthStr = idCard.substring(6, 14); // 截取出生日期部分
    const year = parseInt(birthStr.substring(0, 4), 10);
    const month = parseInt(birthStr.substring(4, 6), 10);
    const day = parseInt(birthStr.substring(6, 8), 10);
    const birthDate = new Date(year, month - 1, day); // 月份从0开始

    // 验证日期是否有效（如2月30日、13月等均为无效）
    if (
        birthDate.getFullYear() !== year ||
        birthDate.getMonth() + 1 !== month ||
        birthDate.getDate() !== day
    ) {
        return false;
    }

    // 5. 校验码算法验证（核心步骤）
    // 5.1 前17位对应的加权因子
    const factors = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
    // 5.2 校验码对应表（余数0-10分别对应）
    const checkCodeMap = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];

    // 5.3 计算前17位与因子乘积的总和
    let sum = 0;
    for (let i = 0; i < 17; i++) {
        sum += parseInt(idCard[i], 10) * factors[i];
    }

    // 5.4 计算余数并获取预期校验码
    const remainder = sum % 11;
    const expectedCheckCode = checkCodeMap[remainder];
    const actualCheckCode = idCard[17]; // 身份证第18位

    // 5.5 对比校验码
    if (actualCheckCode !== expectedCheckCode) {
        return false;
    }

    // 所有验证通过
    return true;
}

function setValue (name,value){
    var first = name.substr(0,1), input, i = 0, val;
    if(value === "") return;
    if("#" === first || "." === first){
        input = $(name);
    } else {
        input = $("[name='" + name + "']");
    }

    if(input.eq(0).is(":radio")) { //单选按钮
        input.filter("[value='" + value + "']").each(function(){this.checked = true});
    } else if(input.eq(0).is(":checkbox")) { //复选框
        if(!$.isArray(value)){
            val = new Array();
            val[0] = value;
        } else {
            val = value;
        }
        for(i = 0, len = val.length; i < len; i++){
            input.filter("[value='" + val[i] + "']").each(function(){this.checked = true});
        }
    } else {  //其他表单选项直接设置值
        input.val(value);
    }
}